package interaction

/**
 * @File : favourite.go
 * @Description : 喜欢列表 喜欢操作
 * @Author : 陈锴
 * @Date : ${DATE} ${TIME}
 */

import (
	"net/http"
	"project/controller"
	"project/mySql"

	"github.com/gin-gonic/gin"
)

// VideoListResponse 视频列表的返回
type VideoListResponse struct {
	controller.Response
	VideoList []controller.Video `json:"video_list"`
}

// 喜欢操作
func FavoriteAction(c *gin.Context) {
	// key
	token := c.Query("token")
	// find user
	user := mySql.GetUserByToken(token)
	// 通过 user_id 的 like
	like := mySql.GetLike(user.Id)
	// get video_id
	video_id := controller.GetIdList(c.Query("video_id"))
	// find video by video_id
	// 注意返回的是数组
	video := mySql.GetVideoListByIdList(video_id)
	// get action
	action := c.Query("action_type")

	// 查重
	haveVideo := controller.ContainsId(like.LikeList, video[0].Id)

	// like add
	if action == "1" && (!haveVideo) {
		// 添加进入喜欢列表
		like.LikeList = controller.AddId(like.LikeList, video[0].Id)
		// 视频点赞数增加
		video[0].FavoriteCount++
		// 更新点赞与被点赞
		video[0].Author.TotalFavourited++
		user.FavouriteCount++

	} else if action == "2" && (haveVideo) {
		// 删除喜欢 对应 id
		like.LikeList = controller.DeleteId(like.LikeList, video[0].Id)
		// 视频点赞数减少
		video[0].FavoriteCount--
		// 更新点赞与被点赞
		video[0].Author.TotalFavourited--
		user.FavouriteCount--
	}

	// 保存更新数据
	mySql.SaveLike(like)
	// mySql.SaveUser(author)
	mySql.SaveUser(user)
	// 保存视频更新数据
	mySql.SaveVideo(video[0])
	c.JSON(http.StatusOK, controller.Response{StatusCode: 0})
}

// Favoritelist 喜欢列表
func Favoritelist(c *gin.Context) {
	// 获取当前用户 id
	id := controller.ParseInt(c.Query("user_id"))
	// 获取喜欢结构体
	like := mySql.GetLike(id)
	// 类型转换
	likeList := controller.GetIdList(like.LikeList)
	// 返回
	c.JSON(http.StatusOK, VideoListResponse{
		Response:  controller.Response{StatusCode: 0},
		VideoList: mySql.GetVideoListByIdList(likeList),
	})
}
